package cn.tedu.design;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;

/**
 * @author :Colin
 * @version 创建时间: 2021/6/24 9:45
 * 本类用于测试单例设计模式是实现方案1
 */
/*本类用于测试单例设计模式实现方案一：饿汉式*/
public class Singleton1 {
    public static void main(String[] args) {
        //通过类名直接调用静态的getSing
        MySingle single1 =MySingle.getSingle();
        MySingle single2 =MySingle.getSingle();
        System.out.println(single1 == single2);//true
        System.out.println(single1);//cn.tedu.design.MySingle@1540e19d
        System.out.println(single2);//cn.tedu.design.MySingle@1540e19d
    }
}
/*思考：在构造方法与对象都私有化以后，我们需要调用公共的全局访问点来获取
* 本类对象，之前的方法都是创建本类对象进行调用，但是现在单例无法再外部创建本类对象
* 解决方案：我们可以将公共方法设置为静态方法，这样就可以被类名直接调用
* 需要注意：本方法中返回的对象也需要设置静态，因为静态只能调用静态*/
 class MySingle{

    //1.构造方法私有化
    /*构造方法私有化的目的：为了防止外界随意调用，实例化/new本类对象*/
    private MySingle() {
    }

    //2.创建一个本类对象，并且将本类对象私有化
    //5.2由于静态资源只能调用静态资源，所以本对象需要设置为静态
    private static MySingle single =new MySingle();

    //3.提供一个公共的全局访问点
    //5.1用static修饰，外部直接调用
    static public  MySingle getSingle() {
        return single;
    }
}
